#include "01_InetAddress.hpp"
#include <arpa/inet.h>          // 包含IP地址转换的函数
#include <cstring>

namespace xy{
    InetAddress::InetAddress(unsigned short port, const std::string& ip)
    {
        memset(&_addr, 0, sizeof(_addr));
        _addr.sin_family = AF_INET;     // 使用IPv4地址族
        _addr.sin_port = htons(port);   // 将16位端口号转换为网络字节序
        _addr.sin_addr.s_addr = inet_addr(ip.c_str());  // 将点分十进制字符串转换为网络字节序的32位整数
    }

    InetAddress::InetAddress(const struct sockaddr_in& addr)
        :_addr(addr){}
    
    std::string InetAddress::get_ip() const             // 需要添加const保持一致
    {
        return inet_ntoa(_addr.sin_addr);               // 将网络字节序的32位整数转换为点分十进制字符串
    }
    
    unsigned short InetAddress::get_port() const
    {
        return ntohs(_addr.sin_port);                   // 将网络字节序的16位端口号转换为主机字节序
    }

    //struct sockaddr_in* InetAddress::get_InetAddress() const    // 返回为const struct sockaddr_in 与 struct sockaddr_in不兼容
    struct sockaddr_in* InetAddress::get_InetAddress()
    {
        return &_addr;
    }
}
